{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 导入必要的工具包\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# plotting\n",
    "import seaborn as sn\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# setting params\n",
    "params = {'legend.fontsize': 'x-large',\n",
    "         'figure.figsize':(30, 10),\n",
    "         'axes.labelsize':'x-large',\n",
    "         'axes.titlesize':'x-large',\n",
    "         'xtick.labelsize':'x-large',\n",
    "         'ytick.labelsize':'x-large'}\n",
    "sn.set_style('whitegrid')\n",
    "sn.set_context('talk')\n",
    "\n",
    "plt.rcParams.update(params)\n",
    "pd.options.display.max_colwidth = 600\n",
    "\n",
    "# pandas display data frames as tables\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 读入数据\n",
    "train = pd.read_csv('day.csv')\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weathersit_1</th>\n",
       "      <th>weathersit_2</th>\n",
       "      <th>weathersit_3</th>\n",
       "      <th>weekday_0</th>\n",
       "      <th>weekday_1</th>\n",
       "      <th>weekday_2</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6  ...  weathersit_1  weathersit_2  weathersit_3  weekday_0  \\\n",
       "0       0       0  ...             0             1             0          0   \n",
       "1       0       0  ...             0             1             0          1   \n",
       "2       0       0  ...             1             0             0          0   \n",
       "3       0       0  ...             1             0             0          0   \n",
       "4       0       0  ...             1             0             0          0   \n",
       "\n",
       "   weekday_1  weekday_2  weekday_3  weekday_4  weekday_5  weekday_6  \n",
       "0          0          0          0          0          0          1  \n",
       "1          0          0          0          0          0          0  \n",
       "2          1          0          0          0          0          0  \n",
       "3          0          1          0          0          0          0  \n",
       "4          0          0          1          0          0          0  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对类别型特征进行独热编码\n",
    "categorical_features = ['season', 'mnth', 'weathersit', 'weekday']\n",
    "\n",
    "# 数据类型变为object才能被get_dummies处理\n",
    "for col in categorical_features:\n",
    "    train[col] = train[col].astype('object')\n",
    "\n",
    "X_train_cat = train[categorical_features]\n",
    "X_train_cat = pd.get_dummies(X_train_cat)\n",
    "X_train_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.826662</td>\n",
       "      <td>-0.679946</td>\n",
       "      <td>1.250171</td>\n",
       "      <td>-0.387892</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.721095</td>\n",
       "      <td>-0.740652</td>\n",
       "      <td>0.479113</td>\n",
       "      <td>0.749602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-1.634657</td>\n",
       "      <td>-1.749767</td>\n",
       "      <td>-1.339274</td>\n",
       "      <td>0.746632</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1.614780</td>\n",
       "      <td>-1.610270</td>\n",
       "      <td>-0.263182</td>\n",
       "      <td>-0.389829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.467414</td>\n",
       "      <td>-1.504971</td>\n",
       "      <td>-1.341494</td>\n",
       "      <td>-0.046307</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       temp     atemp       hum  windspeed\n",
       "0 -0.826662 -0.679946  1.250171  -0.387892\n",
       "1 -0.721095 -0.740652  0.479113   0.749602\n",
       "2 -1.634657 -1.749767 -1.339274   0.746632\n",
       "3 -1.614780 -1.610270 -0.263182  -0.389829\n",
       "4 -1.467414 -1.504971 -1.341494  -0.046307"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对数值型特征进行标准化 去量纲\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "# 实例化标准化对象\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 把数值型特征提取出来\n",
    "numerical_features = ['temp', 'atemp', 'hum', 'windspeed']\n",
    "temp = ss_X.fit_transform(train[numerical_features])\n",
    "\n",
    "X_train_num = pd.DataFrame(data=temp, columns=numerical_features, index=train.index)\n",
    "X_train_num.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>-0.826662</td>\n",
       "      <td>-0.679946</td>\n",
       "      <td>1.250171</td>\n",
       "      <td>-0.387892</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-0.721095</td>\n",
       "      <td>-0.740652</td>\n",
       "      <td>0.479113</td>\n",
       "      <td>0.749602</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-1.634657</td>\n",
       "      <td>-1.749767</td>\n",
       "      <td>-1.339274</td>\n",
       "      <td>0.746632</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-1.614780</td>\n",
       "      <td>-1.610270</td>\n",
       "      <td>-0.263182</td>\n",
       "      <td>-0.389829</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-1.467414</td>\n",
       "      <td>-1.504971</td>\n",
       "      <td>-1.341494</td>\n",
       "      <td>-0.046307</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6  ...  weekday_3  weekday_4  weekday_5  weekday_6      temp  \\\n",
       "0       0       0  ...          0          0          0          1 -0.826662   \n",
       "1       0       0  ...          0          0          0          0 -0.721095   \n",
       "2       0       0  ...          0          0          0          0 -1.634657   \n",
       "3       0       0  ...          0          0          0          0 -1.614780   \n",
       "4       0       0  ...          1          0          0          0 -1.467414   \n",
       "\n",
       "      atemp       hum  windspeed  holiday  workingday  \n",
       "0 -0.679946  1.250171  -0.387892        0           0  \n",
       "1 -0.740652  0.479113   0.749602        0           0  \n",
       "2 -1.749767 -1.339274   0.746632        0           1  \n",
       "3 -1.610270 -0.263182  -0.389829        0           1  \n",
       "4 -1.504971 -1.341494  -0.046307        0           1  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 把数据拼装起来\n",
    "X_train = pd.concat([X_train_cat, X_train_num, train['holiday'], train['workingday']], axis = 1, ignore_index=False)\n",
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 35 columns):\n",
      "instant         731 non-null int64\n",
      "season_1        731 non-null uint8\n",
      "season_2        731 non-null uint8\n",
      "season_3        731 non-null uint8\n",
      "season_4        731 non-null uint8\n",
      "mnth_1          731 non-null uint8\n",
      "mnth_2          731 non-null uint8\n",
      "mnth_3          731 non-null uint8\n",
      "mnth_4          731 non-null uint8\n",
      "mnth_5          731 non-null uint8\n",
      "mnth_6          731 non-null uint8\n",
      "mnth_7          731 non-null uint8\n",
      "mnth_8          731 non-null uint8\n",
      "mnth_9          731 non-null uint8\n",
      "mnth_10         731 non-null uint8\n",
      "mnth_11         731 non-null uint8\n",
      "mnth_12         731 non-null uint8\n",
      "weathersit_1    731 non-null uint8\n",
      "weathersit_2    731 non-null uint8\n",
      "weathersit_3    731 non-null uint8\n",
      "weekday_0       731 non-null uint8\n",
      "weekday_1       731 non-null uint8\n",
      "weekday_2       731 non-null uint8\n",
      "weekday_3       731 non-null uint8\n",
      "weekday_4       731 non-null uint8\n",
      "weekday_5       731 non-null uint8\n",
      "weekday_6       731 non-null uint8\n",
      "temp            731 non-null float64\n",
      "atemp           731 non-null float64\n",
      "hum             731 non-null float64\n",
      "windspeed       731 non-null float64\n",
      "holiday         731 non-null int64\n",
      "workingday      731 non-null int64\n",
      "yr              731 non-null int64\n",
      "cnt             731 non-null int64\n",
      "dtypes: float64(4), int64(5), uint8(26)\n",
      "memory usage: 70.0 KB\n"
     ]
    }
   ],
   "source": [
    "# 建立特征工程\n",
    "FE_train = pd.concat([train['instant'], X_train, train['yr'], train['cnt']], axis = 1)\n",
    "FE_train.to_csv('FE_day.csv', index=False)\n",
    "FE_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 开始线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/warrenwang/anaconda3/lib/python3.7/site-packages/sklearn/model_selection/_split.py:1978: FutureWarning: The default value of cv will change from 3 to 5 in version 0.22. Specify it explicitly to silence this warning.\n",
      "  warnings.warn(CV_WARNING, FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rmse_lr_test is  814.4749076863662\n",
      "rmse_lr_train is  742.7543512758712\n",
      "rmse_ridge_test is  808.7484357144025\n",
      "rmse_ridge_train is  746.6117967899497\n",
      "alpha of ridge is  1.0\n",
      "rmse_lasso_test is  1064.9216393047254\n",
      "rmse_lasso_train is  1104.028519563798\n",
      "alpha of lasso is  256.4697701374553\n",
      "coef of lr is  [   -6.91906028  -784.91424498    85.14188882  -130.80716203\n",
      "   830.57951818 -1486.52104178 -1207.11189185  -541.43991725\n",
      "  -485.71423874     5.00920011   189.79721646  -203.13758244\n",
      "   517.80303827  1287.99236008   929.88764856   407.13880345\n",
      "   586.29640513   914.41090854   409.58907936 -1323.9999879\n",
      "  -191.61244556  -202.49324987   -31.94321238    66.46478675\n",
      "    43.65054603    77.51626321   238.41731182   605.1187722\n",
      "   212.75617243  -190.05732657  -187.57190836  -263.76141517\n",
      "   216.95654891  4550.70889666]\n",
      "coef of ridge is  [ 1.40096778e+00 -7.62087294e+02  1.23105921e+02 -1.27594000e+02\n",
      "  7.66575372e+02 -1.05625038e+02 -7.92789504e+01  3.21587823e+02\n",
      "  1.07819105e+02  3.41553104e+02  2.71067231e+02 -3.46439741e+02\n",
      "  1.28676582e+02  6.56205935e+02  1.01083114e+02 -6.58115767e+02\n",
      " -7.38533398e+02  8.63932373e+02  3.87818477e+02 -1.25175085e+03\n",
      " -1.87891052e+02 -1.97665192e+02 -3.45819969e+01  6.01871335e+01\n",
      "  5.17117268e+01  7.57049732e+01  2.32534407e+02  5.62152081e+02\n",
      "  2.68810270e+02 -2.10396993e+02 -1.96612537e+02 -2.55914639e+02\n",
      "  2.11271283e+02  1.49300700e+03]\n",
      "coef of lasso is  [  5.13183966  -0.           0.           0.          -0.\n",
      "  -0.          -0.           0.           0.           0.\n",
      "   0.          -0.           0.           0.           0.\n",
      "  -0.          -0.           0.          -0.          -0.\n",
      "  -0.          -0.           0.           0.           0.\n",
      "   0.          -0.         115.14904871 676.94578947 -61.24483903\n",
      "  -0.          -0.           0.           0.        ]\n"
     ]
    },
    {
     "data": {
      "image/png": "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FO+++66WLVumbdu2yePx6Oyzz9bQoUM1ZswYpaenR90f5/BIBrGMe7vdrosuukhut7vOdq+++qr69+/fmGEDMbVnzx4NGzZM/fr10+LFixvUBzkfyaaxcU/ORzIoLS1VXl6ePvroI+3du1cOh0MdO3ZU//79NXr0aJ1//vkN6jM3N1cffvihSkpKlJWVpV/84hcaNWqULr/88tgfRIqiCIikdOTIEd17770qKiqSJFksFlksFh08eFDvvfee3n//fU2dOlXjx4+Pql+73a4xY8Zo06ZNkqTMzExVVFRo8+bN2rx5sz755BPNmTNHJpMp5scERMvpdGratGk6cuSIWrdu3eB+jhw54r8g3L59+7DtGnJBDoi1WMW91+vV1KlTlZ+fL6kqvr1erwoLC1VYWKgPP/xQL7/8sqxWa6yGDkRl2bJlmj59uiQpLS1N6enp2rt3rxYvXqx33nlHr732ms4555yo+iTfI1HMmjVLS5YskXTyPH7nzp2aN2+e8vPzlZeXF1Whm3N4JINYx31RUZHcbrfMZrNOO+20sO0sFkujxw7ESllZmR5++GHZ7fYG90HOR7KJRdyT85Ho9u7dqzFjxqikpESSZLPZlJaWppKSEq1atUpvv/22nnnmGQ0bNiziPo8ePao77rhDe/bskSS1atVKpaWlKigoUEFBgSZMmKCpU6c2yfGkGoqASEoPP/ywioqK1KZNGz311FO66qqrZLFYtG/fPs2ePVvvv/++5s6dq27duunKK6+MuN/p06dr06ZNat++vWbNmqVBgwbJ4XBo5cqVmjlzptauXauePXtqzJgxTXh0QP0qKyv1yCOP6OOPP250X9u2bZMkdejQQQUFBY3uD2gqsYz7hQsXKj8/X5mZmXrmmWc0ZMgQmUwm5efn64knntBnn32mWbNm6Yknnmj8wIEoff7555oxY4YkaeLEiRo3bpyysrK0detWPfLII9qzZ48mT56s1atXy2yO/On+5HskgjVr1mjJkiUyDEOPPvqoRowYIavVqoKCAk2bNk07duzQtGnTtGjRooj75Bweia4p4n779u2SpF69emnFihVNNXQgZn766SdNmjRJhYWFjeqHnI9kEqu4J+cjkblcLk2aNEklJSU6++yzNX36dA0cOFAmk0k7duzQjBkztHHjRj322GPq1q2bevbsGVG/U6dO1Z49e9S5c2fNnj1bvXr1Unl5uRYvXqwXXnhBubm56tmzp4YMGdLER5j8WBMQSWfLli3asGGDpKrHVeXk5PjvdDnnnHM0b948/9T3F154IeJ+9+3bp7///e+SpNmzZ2vQoEGSJKvVqpEjR+rhhx+WJC1atEjl5eUxOx4gWrt379Ztt92m999/Pyb9+S4K//znP49Jf0BTiGXcl5WV+e/Ef/TRRzV06FAZhiGz2azf/OY3+tOf/iRJWr58uf8uNqA5zZ8/Xx6PR9dff70efPBBZWVlSar6pf+VV15RZmamioqK9M4770TVL/ke8eZ2u7VgwQJJ0rhx43TXXXf5Z1wPGjRICxculMlk0r///W/997//jahPzuGR6Joi7iVyOpLLli1bdPPNN2vz5s2N6oecj2QSq7iXyPlIbO+99552794twzC0YMECXXrppTKbzTKZTMrOztbLL7+sLl26yOl0Kjc3N6I+N27cqA0bNsgwDL344ovq1auXJCkrK0v333+/Ro0aJUn685//LK/X22THliooAiLprFu3TpJ07rnnhpzlZzKZNHz4cElSYWGhTpw4EVG/b775ptxut7Kzs3XJJZfU2j9y5EidcsopOnbsWExmoQDRcrlcmjFjhoYNG6bt27erXbt2uuKKKxrdLyeTSGRNEfdr165VaWmp2rRpo5tuuqnW/muvvVZdunSRy+WKusgCNNY333yjjRs3SlLIO9jPPPNM3XDDDZKk1atXR9U3+R7xtmHDBhUXF8tsNuuee+6ptf/CCy/0X9CNNL45h0eia4q4l8jpSA5lZWX6/e9/rzvuuEMlJSU699xz1a9fvwb3R85HMoh13EvkfCQ237X6/v37h4xRm83mfwzo559/HlGfy5cvlyQNHjxYXbt2rbV/woQJMplM2rt3r7788suGDr3FoAiIpNO5c2ddd911uuaaa8K26dChg6SqNZ8ivfvrs88+kyQNHDgw5H6r1aq+fftKkj755JNohgzExIkTJ5SXlyen06lrr71W//jHPyKeQl8X32MlLrjggkb3BcRaU8S9L9/369dPaWmhn4zuu6hAvkdz88VnmzZtwv6S74vPzz77TA6HI+K+yfeIN198X3DBBWHXs/HFd6SPrOUcHomuKeLe6/Vqx44dkrggjMS2b98+rVmzRpJ02223adWqVTr77LMb3B85H8kg1nFPzkei69Gjh4YMGaLL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\n",
      "text/plain": [
       "<Figure size 2160x720 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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ZrPV287xVkxDN/AAWkdL414izwPebvHixfr55581fPhwjRkzpsX91X7znXwPeCej416SEhISlJCQUO/xnj176pFHHtHKlSu1ZcsWvfjii4b8LoDGDR48WIMHD673eGBgoNLS0pSWlqa8vDwVFxc3+DI9tT3g/YyOe8nztT1fvKFDKSkp0fjx452TbhMmTNCMGTMM/52YmBhJ/23UDqD1BQUFyWw2y2QyqUePHnr77bd1zz33SJLeeuutS9Z2rktwcLDz79prS/9/lZWVksTG64AXaGncu4o8D3jGgQMHtGzZMoWEhOj11183pM/a+d6R0+tCvgc8wx1x76ro6GhJ0qlTpxqsBwC0Pkd8StLRo0cbbEttD7QPTYl7V7mztueLN3QYR48eVWpqqoqLiyVJaWlpmjRpklt+q3PnzpIaLt4BtL4JEyZo+/btOn36tEpKShQeHl5v227duslkMslut6ukpES9evWqs51jo2bHRswAvEtT4t5V5HnAM9atW6eamhqdP39eo0aNuux4eXm5JGnPnj264447JElvv/22BgwYUG+fFotFISEhKisrc27oXhfyPeAZ7oh7VznyvSTn3vAAvEPt+GxsYpzaHmgfmhL3Te3THbU9E2/oEA4ePKgnn3xS586dk9ls1uzZszVu3Lgm91NaWqrNmzertLRUY8aMqfeT1r/++kuS1LVr1xaNG4DrCgoKVFhYqO7du6t37951tgkNDXX+XVZW1uAD+ODgYF1zzTUqLi7W8ePHNWTIkDrbFRYWSlK9N+8A3MfouCfPA97N8dVqVVVVg8W2zWZzxmlDS0o5REREKDc3VwUFBfW2Id8DnuGOuK+qqtInn3yi0tJS3X333brpppvqbOfoz2KxXPKwD4B7bd68WSdPntQNN9yge++9t842f//9t/Pvxu7Jqe0B72d03HtDbc/EG9q9I0eOOCfdLBaLFi5c6Fx2qqlsNpvS09MlSVdeeaWSkpLqbLdr1y5JMuQtOwCumTFjhg4cOKAHHnhACxYsqLON49NxHx8fdevWrdE+Bw4cqI0bN2r37t167LHHLjv+559/6vfff3e2BdC6jI578jzg3TIyMpSRkVHv8RkzZujTTz/V0KFDlZWV5XK/AwcOVG5urnbv3l3ncavVqr179zrbAmg97oh7X19fzZkzR5WVlSovL6934s2R72+55Rb5+LBTC9BaPv74Y+3atUt9+/at9wF8dna2pIt7tfbt27fRPqntAe9mdNx7Q23PnQPatYqKCqWlpencuXMKCAjQ0qVLmz3pJknh4eGKioqSJK1atUrnz5+/rM3XX3/tLMzHjh3b7N8C0DTDhg2TJG3dulUnTpy47LjVatWSJUskXbyRvvLKKxvt87777pMk7dixo871njMzM2W32xUREeFcFxpA6zE67snzQMfkyPc///yzcy/o2lavXq3y8nKFhIQoLi6utYcHwGBms9l5D7Fx48Y6l5n95ZdftHnzZklSfHx8q44P6OiGDx8uSfr111+dD9prKy8v13vvvSdJevDBB11aBpbaHvBuRse9N9T2TLyhXVuyZInzQdwrr7yiwYMHu3TeoUOHFBcXp7i4OG3btu2SY5MnT5bJZFJhYaGefvpp52aOlZWVWrt2raZMmSJJevjhh3kTHmhF48ePV1hYmKxWq1JSUpSdna3q6mpJ0uHDh5WSkqKffvpJFotF06dPd57XULzHxsYqJiZG1dXVSk1NdSbkCxcuaPHixVq5cqWki3tGmkymVrpSAA7uiHvyPNA+nTlzxhn3q1atuuRYRESEc++oKVOmaPv27bLb7bLZbFqzZo3zi9rU1FQFBga2+tgBNE9DcT9p0iT5+fnp7NmzSk1NVV5env79919VV1dry5YtSk5Ols1m0+DBg/XAAw946AqAjmns2LG6/vrrJUkvvviiNm/eLKvVKknKy8tTUlKSTp06pa5du2ry5MnO86jtgbbLHXHv6dqepSbRblmtVq1Zs0aSZDKZtGDBgnqXoXJwfF564cIFHT9+XNJ/mzU7DBs2TDNnzlRGRob27Nmj+++/X0FBQbLZbM615EeMGKFXX33V6EsC0IAuXbpo2bJlSk1N1YkTJ5SSkiI/Pz/5+/uroqJC0sVNUxcsWHDJJ+kNxbskzZ07V4mJiTp16pQSEhIUHBysqqoq58P9Z599lrffAQ9xR9yT54H2yWazOeO+rKzssuOzZs3S0aNH9csvv+i5555TYGCgampqnAX/qFGjlJKS0qpjBtAyDcV9ZGSk5s+fr+nTp+vIkSOKj4+/LO5vu+02LV68mIfwQCsLCAhQZmamUlJSdPr0aU2ZMkW+vr7y9/d3frUSGhqq999/X1dffbXzPGp7oO1yR9x7urZn4g3tVn5+vv755x9JFzdkdmyWaISkpCQNGDBAK1asUE5OjkpLS9WpUyf17dtXY8aMcX7CDqB13Xjjjfr888+1YsUK7dixQydOnFBNTY0iIiIUGxurCRMmKDw8vEl9du/eXRs3btSyZcu0detWFRUVyWKxaMCAARo/frxGjhzppqsB4Ap3xD15Huh4unTporVr12rFihXatGmTTpw4IbPZrP79+2vs2LEsLQu0Q3FxcYqMjNTy5cu1a9cunTlzRkFBQerXr58efPBBjR07Vmaz2dPDBDqkXr166bPPPtOHH36obdu2qbCwUJLUp08f3X333UpOTlaXLl2a1Ce1PeDd3BH3nqztTXa73e623gEAAAAAAAAAAIAOgj3eAAAAAAAAAAAAAAMw8QYAAAAAAAAAAAAYgIk3AAAAAAAAAAAAwABMvAEAAAAAAAAAAAAGYOINAAAAAAAAAAAAMAATbwAAAAAAAAAAAIABmHgDAAAAAAAAAAAADMDEGwAAAAAAAAAAAGAAJt4AAAAAAAAAAAAAAzDxBgAAAAAAAAAAABjg/wBVy44JC2nsFwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 2160x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 下面这行报错 TypeError: parser_f() got an unexpected keyword argument 'index'\n",
    "#fe_df = pd.read_csv(\"FE_day.csv\", index = False)\n",
    "\n",
    "fe_df = FE_train\n",
    "# print(fe_df.info())\n",
    "\n",
    "# 从原始数据中分离输入特征X 和 输出特征y\n",
    "y = fe_df[\"cnt\"]\n",
    "X = fe_df.drop([\"cnt\"], axis = 1)\n",
    "\n",
    "# 特征名称， 用于后续显示权重系数对应的特征\n",
    "feat_names = X.columns\n",
    "\n",
    "# 用train_test_split 选出一部分做训练集，剩下的部分作为测试集\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 随机采样20%作为测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 33, test_size = 0.2)\n",
    "\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.linear_model import RidgeCV\n",
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "# 缺省参数的线性回归\n",
    "lr = LinearRegression()\n",
    "\n",
    "# 岭回归超参数的设置\n",
    "alphas_ridge = np.logspace(-2, 2, 5)\n",
    "ridge = RidgeCV(alphas=alphas_ridge, store_cv_values=True)\n",
    "\n",
    "# Lasso 模型\n",
    "#Lasso可以自动确定最大的alpha，所以另一种设置alpha的方式是设置最小的alpha值（alpha_min = alpha_max * eps） 和 超参数的数目（n_alphas），\n",
    "# class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "#                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "#                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "#                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "\n",
    "lasso = LassoCV()\n",
    "\n",
    "# 模型训练\n",
    "lr.fit(X_train, y_train)\n",
    "ridge.fit(X_train, y_train)\n",
    "lasso.fit(X_train, y_train)\n",
    "\n",
    "# 预测\n",
    "y_test_lr = lr.predict(X_test)\n",
    "y_train_lr = lr.predict(X_train)\n",
    "\n",
    "y_test_ridge = ridge.predict(X_test)\n",
    "y_train_ridge = ridge.predict(X_train)\n",
    "\n",
    "y_test_lasso = lasso.predict(X_test)\n",
    "y_train_lasso = lasso.predict(X_train)\n",
    "\n",
    "# print(y_test_ridge)\n",
    "# print(\"*\" * 10)\n",
    "# print(y_train_ridge)\n",
    "\n",
    "from sklearn import metrics\n",
    "#from sklearn.metrics import r2_score\n",
    "# 评估\n",
    "rmse_lr_test = (metrics.mean_squared_error(y_test_lr, y_test))**0.5\n",
    "rmse_lr_train = (metrics.mean_squared_error(y_train_lr, y_train))**0.5\n",
    "\n",
    "rmse_ridge_test = (metrics.mean_squared_error(y_test_ridge, y_test))**0.5\n",
    "rmse_ridge_train = (metrics.mean_squared_error(y_train_ridge, y_train))**0.5\n",
    "\n",
    "rmse_lasso_test = (metrics.mean_squared_error(y_test_lasso, y_test))**0.5\n",
    "rmse_lasso_train = (metrics.mean_squared_error(y_train_lasso, y_train))**0.5\n",
    "\n",
    "print(\"rmse_lr_test is \", rmse_lr_test)\n",
    "print(\"rmse_lr_train is \", rmse_lr_train)\n",
    "print(\"rmse_ridge_test is \", rmse_ridge_test)\n",
    "print(\"rmse_ridge_train is \", rmse_ridge_train)\n",
    "print(\"alpha of ridge is \", ridge.alpha_)\n",
    "print(\"rmse_lasso_test is \", rmse_lasso_test)\n",
    "print(\"rmse_lasso_train is \", rmse_lasso_train)\n",
    "print(\"alpha of lasso is \", lasso.alpha_)\n",
    "print(\"coef of lr is \", lr.coef_)\n",
    "print(\"coef of ridge is \", ridge.coef_)\n",
    "print(\"coef of lasso is \", lasso.coef_)\n",
    "\n",
    "# 线性回归可视化\n",
    "plt.subplot(3, 1, 1)\n",
    "plt.scatter(y_test_lr, y_test_lr - y_test)\n",
    "\n",
    "# 调优过程\n",
    "# 岭回归\n",
    "plt.subplot(3, 1, 2)\n",
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean)\n",
    "plt.show()\n",
    "# Lasso\n",
    "plt.subplot(3, 1, 2)\n",
    "rmses = (np.mean(lasso.mse_path_, axis = 1))**0.5\n",
    "plt.plot(np.log10(lasso.alphas_), rmses)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 根据评价指标RMSE在测试集数据上来看，上述三个模型从优到劣依次是岭回归、最小二乘、Lasso模型。岭回归和最小二乘对测试集的预测情况差不多，但是Lasso模型明显差了很多。通过查看Lasso预测模型的各个参数也能看到，很多变量的系数都是0，这也很符合Lasso预测的特点。出现这样的原因有两个：1、模型的维度不够多 2、模型的数据量不够大。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
